/**
 * 本地存储封装
 * 支持过期时间设置
 */

/**
 * 设置本地存储
 * @param {String} key 存储键名
 * @param {*} value 存储值
 * @param {Number} expire 过期时间(毫秒)，不设置表示永不过期
 */
export function setStorage(key, value, expire) {
  const data = {
    value,
    time: Date.now(),
    expire: expire ? Date.now() + expire : null,
  };

  uni.setStorageSync(key, JSON.stringify(data));
}

/**
 * 获取本地存储
 * @param {String} key 存储键名
 * @param {*} defaultValue 默认值
 * @returns {*} 存储值
 */
export function getStorage(key, defaultValue = null) {
  const data = uni.getStorageSync(key);

  if (!data) return defaultValue;

  try {
    const parsed = JSON.parse(data);

    // 判断是否过期
    if (parsed.expire && Date.now() > parsed.expire) {
      uni.removeStorageSync(key);
      return defaultValue;
    }

    return parsed.value;
  } catch (e) {
    // 旧版数据格式，直接返回
    return data;
  }
}

/**
 * 移除本地存储
 * @param {String} key 存储键名
 */
export function removeStorage(key) {
  uni.removeStorageSync(key);
}

/**
 * 清空所有本地存储
 */
export function clearStorage() {
  uni.clearStorageSync();
}

/**
 * 获取所有本地存储的key
 * @returns {Array} key数组
 */
export function getStorageKeys() {
  const res = uni.getStorageInfoSync();

  if (res.errMsg === "getStorageInfo:ok") {
    return res.keys;
  }

  return [];
}

/**
 * 获取本地存储信息
 * @returns {Object} 存储信息
 */
export function getStorageInfo() {
  const res = uni.getStorageInfoSync();

  if (res.errMsg === "getStorageInfo:ok") {
    return {
      keys: res.keys,
      currentSize: res.currentSize,
      limitSize: res.limitSize,
    };
  }

  return {
    keys: [],
    currentSize: 0,
    limitSize: 0,
  };
}
